/*
** rotation.c for RayTracer in /home/jeanma_d//Damien/Igraph/RayTracer
** 
** Made by damien jeanmaire
** Login   <jeanma_d@epitech.net>
** 
** Started on  Wed Feb 22 17:59:16 2012 damien jeanmaire
** Last update Sat Mar 31 14:10:25 2012 damien jeanmaire
*/

#include	"rt.h"

t_coord		rotate_x(t_coord *coord, double rot)
{
  t_coord	tmp;

  tmp.x = coord->x;
  tmp.y = coord->y * cosf(rot) - coord->z * sinf(rot);
  tmp.z = coord->y * sinf(rot) + coord->z * cosf(rot);
  return (tmp);
}

t_coord		rotate_y(t_coord *coord, double rot)
{
  t_coord	tmp;

  tmp.x = coord->x * cosf(rot) + coord->z * sinf(rot);
  tmp.y = coord->y;
  tmp.z = -coord->x * sinf(rot) + coord->z * cosf(rot);
  return (tmp);
}

t_coord		rotate_z(t_coord *coord, double rot)
{
  t_coord	tmp;

  tmp.x = coord->x * cosf(rot) - coord->y * sinf(rot);
  tmp.y = coord->x * sinf(rot) + coord->y * cosf(rot);
  tmp.z = coord->z;
  return (tmp);
}

t_coord		rotate(t_coord *coord, t_coord *rot)
{
  t_coord	rot_coord;

  rot_coord.x = coord->x;
  rot_coord.y = coord->y;
  rot_coord.z = coord->z;
  rot_coord = rotate_x(&rot_coord, PI * (rot->x) / 180);
  rot_coord = rotate_y(&rot_coord, PI * (rot->y) / 180);
  rot_coord = rotate_z(&rot_coord, PI * (rot->z) / 180);
  return (rot_coord);
}

t_coord		rotate_inv(t_coord *coord, t_coord *rot)
{
  t_coord	rot_coord;

  rot_coord.x = coord->x;
  rot_coord.y = coord->y;
  rot_coord.z = coord->z;
  rot_coord = rotate_z(&rot_coord, -PI * (rot->z) / 180);
  rot_coord = rotate_y(&rot_coord, -PI * (rot->y) / 180);
  rot_coord = rotate_x(&rot_coord, -PI * (rot->x) / 180);
  return (rot_coord);
}
